from PyQt5.QtWidgets import *       #部件，控件相关
from PyQt5.QtGui import *           #图片相关
from PyQt5.QtCore import *          #事件相关(鼠标等事件)

import sys                          

#自定义窗口，继承窗口
class MyWidget(QWidget):
    
    def __init__(self, parent=None):
        super().__init__(parent)
        
        self.setWindowTitle("围棋")
        self.setWindowIcon(QIcon("./img/豆包.jpg"))
        
        self.init_ui()

    def init_ui(self):
        self.x = -1             #起点x
        self.y = -1             #起点y
        self.gripwidth = -1     #网格宽度
        self.gripheight = -1    #网格高度
        self.press_x = -1       #鼠标按下x下标  
        self.press_y = -1       #鼠标按下y下标
        
        #设置窗口的最小值
        self.setMinimumSize(800,800)
    
    #鼠标按下事件
    def mousePressEvent(self, event):
        
        #点击一下就更新一下绘图事件
        self.update()
        
        # 鼠标位置
        ex = event.x()
        ey = event.y()
        
        #获取鼠标按下位置的下标
        self.press_x = (ex - self.x) // self.gripwidth
        self.press_y = (ey - self.y) // self.gripheight
        
        #如果下标在范围内，输出下标位置，如果不在置默认值
        if self.press_x >= 0 and self.press_x < 8 and self.press_y >= 0 and self.press_y < 8:
            print("点击下标位置：",self.press_x, self.press_y)
        else:
            self.press_x = -1
            self.press_y = -1
        
    #绘图事件
    def paintEvent(self, event: QPaintEvent):
        
        #打印绘图事件
        #print(event.rect())
        
        #创建画家
        painter = QPainter(self)
        
        #画背景图 起点x 起点y 背景宽度 背景高度 背景图片路径
        painter.drawPixmap(0, 0, self.width(), self.height(), QPixmap('./img/back2.png'))
        
        self.gripwidth = self.width() // 12     #网格宽度，总宽度//12
        self.gripheight = self.height() // 12   #网格高度，总高度//12
        
        self.x = self.gripwidth *2      #起点x，第三个格子
        self.y = self.gripheight *2     #起点y，第三个格子
        
        #设置线的格式
        pen = QPen(Qt.black,2)
        #画笔交给画家
        painter.setPen(pen)

        for i in range(9):
            #                起点x   起点y                      终点x                      终点y
            #画横线  
            painter.drawLine(self.x, self.y+self.gripheight*i, self.x + self.gripwidth*8, self.y+self.gripheight*i)
            #画竖线
            painter.drawLine(self.x+self.gripwidth*i, self.y, self.x+self.gripwidth*i , self.y+self.gripheight*8)
        
        #设置需要画绿框的画笔格式
        pen = QPen(Qt.green, 1)
        #将画笔交给画家
        painter.setPen(pen)
        
        #画棋子
        #如果点击的位置不在棋盘外，就画棋子
        if self.press_x != -1:
            #画棋子                 
            painter.drawPixmap(self.x + self.press_x*self.gripwidth,        #起点
                               self.y + self.press_y*self.gripheight,       #终点
                                self.gripwidth, self.gripheight,            #宽度，高度
                                QPixmap("./img/black.png"))                 #图片路径
            
            #画绿框
            painter.drawRect(self.x + self.press_x*self.gripwidth,        #起点
                               self.y + self.press_y*self.gripheight,       #终点
                                self.gripwidth, self.gripheight)
        
        
# 作为主函数才会执行
if __name__ == '__main__':
    
    # 创建应用程序
    app = QApplication(sys.argv)

    # 创建窗口
    w = MyWidget()
    
    #显示窗口
    w.show()

    #等待窗口停止
    sys.exit(app.exec())